﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using RandomSearch.Plugins.DefaultSearch;
using RandomSearch.PluginsCommon;

namespace UnitTests {
    [TestClass]
    public class TextSearchConcept {
        [TestMethod]
        public void OrdinalComparation() {
            int res = "国务院关于同意将四川省会理县列为国家历史文化名城".IndexOf("省会理", StringComparison.OrdinalIgnoreCase);
            Assert.IsTrue(-1 < res);

            res = "国务院关于同意将四川省会理县列为国家历史文化名城".IndexOf("省会理文", StringComparison.OrdinalIgnoreCase);
            Assert.AreEqual(-1, res);

            res =
                "В 1700 году началась долгая Северная война. После первых побед в 1702 году, среди которых было и освобождение от шведов расположенн"
                    .IndexOf("После", StringComparison.OrdinalIgnoreCase);
            Assert.IsTrue(-1 < res);

            res =
                "В 1700 году началась долгая Северная война. После первых побед в 1702 году, среди которых было и освобождение от шведов расположенн"
                    .IndexOf("швёдов", StringComparison.OrdinalIgnoreCase);
            Assert.AreEqual(-1, res);
        }

        
        [TestMethod]
        [DeploymentItem("dd_VSMsiLog6284.txt")]
        public void LargeFileTest() {
            const string stringToSearch = "FSharp_Redist_Silverlight_Libs_Client30.6C88FD56_B341_4B20_9BCF_EBAC321B3C47";
            var plugin = new TextSearch();
            var searchOptions = new SearchOptions
                                    {
                                        IncludeSubfolders = false, 
                                        PathToRootFolder = Environment.CurrentDirectory,
                                        PluginId = plugin.PluginId,
                                        Settings = new Dictionary<string, string> { {"TextSearch_Text", stringToSearch} }
                                    };
            var res = plugin.Search(searchOptions).ToList();
            Assert.AreEqual(1,res.Count);
            Assert.AreEqual("dd_VSMsiLog6284.txt", new FileInfo(res[0].File).Name);
        }

        [TestMethod]
        [DeploymentItem("dd_VSMsiLog6284.txt")]
        public void LargeFileTestFail() {
            const string stringToSearch = "Some_string";
            var plugin = new TextSearch();
            var searchOptions = new SearchOptions {
                IncludeSubfolders = false,
                PathToRootFolder = Environment.CurrentDirectory,
                PluginId = plugin.PluginId,
                Settings = new Dictionary<string, string> { { "TextSearch_Text", stringToSearch } }
            };
            var res = plugin.Search(searchOptions).ToList();
            Assert.AreEqual(0, res.Count);
        }
    }
}